package com.itheima.health.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.interfaces.CheckGroupService;
import com.itheima.mapper.CheckGroupMapper;
import com.itheima.pojo.CheckGroup;
import com.itheima.resources.entity.QueryPageBean;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Transactional
public class CheckGroupServiceImpl extends ServiceImpl<CheckGroupMapper, CheckGroup> implements CheckGroupService {

    @Override
    public Map findPageByContion(QueryPageBean queryPageBean) {
        // LambdaQueryWrapper 条件构造器
        LambdaQueryWrapper<CheckGroup> lambda = new QueryWrapper<CheckGroup>().lambda();
        String queryString = queryPageBean.getQueryString();//查询条件
        queryString = queryString == null ? "" : queryString;

        //  对象名::方法名
        lambda.eq(CheckGroup::getIs_delete, 0);//   默认 and 条件
        lambda.like(CheckGroup::getName, queryString).or().eq(CheckGroup::getHelpCode, queryString);

//        queryWrapper.like("name",queryString==null?"":queryString);//模糊查询分页
//        queryWrapper.eq("is_delete",0);// 有效数据
        //分页请   求数据
        Page<CheckGroup> page = page(new Page<CheckGroup>(queryPageBean.getCurrentPage(), queryPageBean.getPageSize()), lambda);
        List<CheckGroup> records = page.getRecords();//将数据封装成list数据类型
        long total = page.getTotal();
        Map map = new HashMap(); //定义一个map对象封装分页查询结果集数据
        map.put("list", records); // 分页数据
        map.put("total", total); //总记录数
        return map;
    }

    @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemIds) {
        //   添加和修改检查组
        Integer groupId = checkGroup.getId(); //   实体类 存在id  说明修改操作
        if (groupId != null) {
            // update  先删除 中间表数据  清空中间表数据
            baseMapper.relieveByGroupId(groupId);
        }
        saveOrUpdate(checkGroup);  // 如果存在id ---update  如果不存在id  save
        groupId = checkGroup.getId(); //  获取检查组的主键
        if (checkitemIds != null && checkitemIds.length != 0) {
            for (Integer checkitemId : checkitemIds) {
                //  更新中间表   检查组和检查项中间表
                baseMapper.addCheckGroupAndCheckItemIds(groupId, checkitemId);
            }
        }
//        //添加检查组的信息
//        baseMapper.insert(checkGroup); // 获取当前记录的主键
//        Integer id = checkGroup.getId();// 获取检查组队的主键
//        if (checkitemIds!=null&&checkitemIds.length!=0){
//            for (Integer checkitemId : checkitemIds) {
//                //更新中间表信息
//                baseMapper.addCheckGroupAndCheckItemIds(id,checkitemId);
//            }
//        }
    }

    @Override
    public List<CheckGroup> findAll() {
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("is_delete", 0);//  有效数据
        return list(queryWrapper);
    }
}
